package com.lanou3g.code0418.wait;

/**
 * Created by dllo on 18/4/18.
 */
/*
wait()和sleep()的区别
共同点:都可以让线程停止
区别: 1.wait()是Object类的方法,任何对象都有
       sleep()是Thread类的方法
     2.wait()必须写在synchronized代码块中,而且必须是 锁对象 调用wait()
       而sleep()没有限制,不需要synchronized
     3.wait()会释放锁对象,而sleep()不会
     4.wait()可以被别的线程唤醒,而sleep需要等待时间结束
 */
public class Main {
    public static void main(String[] args) {
        final Object lock = new Object();
        Thread a = new Thread() {
            @Override
            public void run() {
                System.out.println("a线程开始了");

                synchronized (lock) {

                    try {
                        lock.wait();
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
                System.out.println("a线程结束了");
            }
        };
        a.start();

        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        System.out.println("准备唤醒a线程");

        synchronized (lock) {

            lock.notify(); //唤醒一个线程,而且是随即唤醒
                           // lock.notifyAll();唤醒全部 锁对象 下的线程
        }

    }
}
